iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

Java 基本觀念與練習系列 第 5

為什麼也需要有 CLASSPATH 呢?

  • 分享至 

  • xImage
  •  

前一篇提到,我們在聊 PATH 是說電腦要知道可以執行 java 指令的程式放在哪裡(路徑),
那 CLASSPATH 呢?

前幾篇有說到,JVM 只看得懂 .class,java 指令就是在啟動 JVM,
當執行 java 指令時,JVM 也會根據當下的程式目錄去尋找 .class檔,但如果找不到 .class 檔,
就會發生下面的狀況
https://ithelp.ithome.com.tw/upload/images/20210905/20106215Xwu3jXw2Ku.png

但我們可以手動去設定 CLASSPATH,告訴 JVM .class 放在哪裡,java -classpath {路徑} 或是簡寫 java -cp {路徑} 就像:
https://ithelp.ithome.com.tw/upload/images/20210905/20106215KoQgRzmPwR.png

一樣也可以執行我們第二天的範例類別哦!

但是這樣每次想執行 java 指令的時候都要特地寫上 -cp or -classpath 去做設定太麻煩了,
如果是很常用的路徑,也可以透過設定環境變數 CLASSPATH ,設定一次之後不管在哪個目錄下都可以用了!
https://ithelp.ithome.com.tw/upload/images/20210905/20106215t4yCBn5MjR.png

我們來整理一下 PATH 跟 CLASSPATH 兩個的差別~

作業系統 搜尋路徑 可執行檔
Windows、Mac OS PATH .exe、.bat、Unix執行檔
JVM CLASSPATH .class

而且還有一件事情,我們是透過 javac 的指令來進行編譯產生 .class 檔案,
如果程式碼裡面有使用到其他的類別程式的時候,也要指定 CLASSPATH,
讓 javac 編譯器知道要去哪裡尋找額外使用的類別哦!

下面就來模擬一下上述說的情境吧!

我有兩個 .java 檔案 分別內容為:
https://ithelp.ithome.com.tw/upload/images/20210906/20106215Palwn4nNUt.png

目錄結構如下
https://ithelp.ithome.com.tw/upload/images/20210906/20106215NqTHPQTTxp.png

Step 1 : 先建立 Utils.class :

https://ithelp.ithome.com.tw/upload/images/20210906/20106215El8EmOi2Et.png

Step 2 : 再建立 MyHelloWorld.class :

卻說找不到我的 Utils.class
https://ithelp.ithome.com.tw/upload/images/20210906/20106215JJr88F0Wwt.png

這時候就要設定 CLASSPATH ,再執行一次!
javac -cp classes MyHelloWorld.java
https://ithelp.ithome.com.tw/upload/images/20210906/20106215BPSr6X6Jmw.png

Step 3 : 執行 java MyHelloWorld

結果又錯了,又跟我說找不到 Utils.class
https://ithelp.ithome.com.tw/upload/images/20210906/20106215v3apBUG5PB.png

這時候就要設定 CLASSPATH ,再執行一次!
java -cp .:classes MyHelloWorld
https://ithelp.ithome.com.tw/upload/images/20210906/20106215ism81GXuDP.png

step 2 是針對 javac
step 3 是針對 java(JVM),
他們對象不同哦~


上一篇
PATH 到底在幹嘛呢?
下一篇
SOURCEPATH 能幫助我們什麼呢?
系列文
Java 基本觀念與練習8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言